/**
 * 3η ΓΕ 2013-2014 - Super Market
 * ΦΡΑΓΚΟΥΛΟΠΟΥΛΟΥ ΕΜΜΑΝΟΥΕΛΑ (69298)
 * ΧΑΛΔΑΣ ΧΑΡΑΛΑΜΠΟΣ (69305)
 * ΧΟΡΜΟΒΙΤΗΣ ΙΩΑΝΝΗΣ (69325)
 * ΧΟΥΣΤΟΥΛΑΚΗ ΕΥΑΓΓΕΛΙΑ (69327)
 */
package supermarket;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import model.*;

/**
 * Το Class του Χρήστη της εφαρμογής Ο χρήστης μπορεί να είναι είτε ο
 * Administrator είτε κάποιος εγγεγραμμένος Πελάτης.
 */
public class User {

    private Boolean isAdmin;        // Είναι ο Administrator ?
    private Customer customer;      // Το object του Customer
    private String userFullName;    // Το User Name

    /**
     * True αν ο χρήστης είναι ο Administrator False αν ο χρήστης είναι Πελάτης.
     *
     * @return true / false
     */
    public Boolean isIsAdmin() {
        return this.isAdmin;
    }

    /**
     * Επιστρέφει το object του Πελάτη που αντιστοιχεί στον συνδεδεμένο χρήστη
     *
     * @return Το object του Πελάτη / null αν πρόκειται για τον Administrator
     */
    public Customer getCustomer() {
        return this.customer;
    }

    /**
     * Επιστρέφει το Ονοματεπώνυμο του Πελάτη ή το λεκτικό 'Administrator' Το
     * String αυό χρησιμοποιείται σαν Window Title στη MainForm της εφαρμογής
     *
     * @return 'Ονοματεπώνυμο Πελάτη' / 'Administrator'
     */
    public String getUserFullName() {
        return this.userFullName;
    }

    /**
     * Καλείται από την οθόνη Login. Επιστρέφει true σε επιτυχημένο login /
     * false σε αποτυχημένο
     *
     * @param userName Αρ.Κάρτας Πελάτη ή 'admin'
     * @param password Password Πελάτη ή 'admin'
     * @return true / false
     */
    public Boolean Login(String userName, String password) {
        // Αν τα credentials ανήκουν στον Administrator
        if (userName.equals("admin") && password.equals("admin")) {
            this.isAdmin = true;
            this.userFullName = "Administrator";
            return true;
        } else {
            // Αναζητούμε το συνδυασμό UserName / Password στο Table [CUSTOMER]
            EntityManager em = EntityManagerFactory.getEntityManager();
            TypedQuery<Customer> q = em.createQuery(
                    "select c FROM Customer c where c.pointsCardNumber='"
                    + userName + "' AND c.password='"
                    + password + "'",
                    Customer.class);
            List<Customer> ls = q.getResultList();
            if (ls.size() == 1) {
                this.isAdmin = false;
                this.customer = ls.get(0);
                this.userFullName = this.customer.getLastName() + " "
                        + this.customer.getFirstName();
                return true;
            }

        }
        return false;
    }
}
